package com.findMoneyGame.pages.preloading {
	import flash.events.Event;

	import com.findMoneyGame.events.UserEvent;
	import com.findMoneyGame.pages.preloading.ThePreloader;
	import com.findMoneyGame.pages.preloading.UserDataFetchingState;
	import com.findMoneyGame.pages.preloading.LoadingErrorPage;
	import com.findMoneyGame.pages.preloading.PreloaderState;

	public class CreatingNewUserState extends PreloaderState {
		private static const LOADING_PARTS_LOADED = 3;

		public function CreatingNewUserState (thePreloader : ThePreloader) { super(thePreloader); }

		public function start () {
			trace('Состояние прелоадера: запрос на создание нового пользователя');
			// подписаться на события получения результатов запроса на создание нового пользователя
			user.addEventListener(UserEvent.CREATE_NEW_COMPLETE, createNewUserComplete);
			user.addEventListener(UserEvent.CREATE_NEW_ERROR, createNewUserError);
			// отправить запрос на создание нового пользователя
			user.beginCreateNew();
			// подписаться на обновление полосы загрузки
			thePreloader.addEventListener(Event.ENTER_FRAME, checkCreateNewUser);
		}

		private function createNewUserComplete (e : Event) {
			unsubscribe();
			// загружаем данные
			new UserDataFetchingState(thePreloader).start();
		}
		private function createNewUserError (e : Event) {
			unsubscribe();
			thePreloader.addChild(new LoadingErrorPage());
		}
		private function checkCreateNewUser (e : Event) {
			var user = user;
			var progress = user.bytesTotal == 0 ? 0 : user.bytesLoaded / user.bytesTotal;
			thePreloader.setPreloadingPercent((LOADING_PARTS_LOADED + progress) / LOADING_PARTS_COUNT);
		}
		private function unsubscribe () {
			thePreloader.removeEventListener(Event.ENTER_FRAME, checkCreateNewUser);
			user.removeEventListener(UserEvent.CREATE_NEW_COMPLETE, createNewUserComplete);
			user.removeEventListener(UserEvent.CREATE_NEW_ERROR, createNewUserError);
		}
	}
}